package com.itheima.stock.controller;

import com.itheima.stock.common.domain.*;
import com.itheima.stock.config.vo.PageResult;
import com.itheima.stock.pojo.StockBusiness;
import com.itheima.stock.service.StockService;
import com.itheima.stock.vo.resp.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/api/quot")
public class StockController {

    @Autowired
    private StockService stockService;

    @GetMapping("/stock/business/all")
    public List<StockBusiness> findAllBusiness() {
        return stockService.findAll();
    }

    /*
     * 获取最新的A股大盘信息,如果不在股票交易日,则显示最新的的交易数据信息
     * */
    @GetMapping("/index/all")
    public R<List<InnerMarketDomain>> getNewMarketInfo() {
        return stockService.getNewMarketInfo();
    }

    /*
     需求说明: 沪深两市板块分时行情数据查询，
     以交易时间和交易总金额降序查询，取前10条数据
     * */
    @GetMapping("/sector/all")
    public R<List<StockBlockDomain>> sectorAll() {
        return stockService.sectorAllLimit();
    }

    /*
     * 沪深两市个股涨幅分时行情数据查询，以时间顺序和涨幅查询前10条数据
     * */
    @GetMapping("/stock/increase")
    public R<List<StockUpdownDomain>> stockIncreaseLimit() {
        return stockService.stockIncreaseLimit();
    }
    /*
    * page 当前页 pageSize 每页大小
    * 分页查询股票交易数据,按照日期和涨幅降序排序
    * */
    @GetMapping("/stock/all")
    public R<PageResult<StockUpdownDomain>> getStockInfo4Page(Integer page,Integer pageSize) {
        return stockService.getStockInfo4Page(page,pageSize);
    }

    /*
    * 统计T日(最近最新一次股票交易日)涨停和跌停分数统计
    * */
    @GetMapping("/stock/updown/count")
    public R<Map> getSottckUpdownCount(){
        return stockService.getSotckUpdownCount();
    }

    /*
     * 将指定页的股票数据导出到excel表下
     * response
     * page  当前页 pageSize 每页大小
     * */
    @GetMapping("/stock/export")
    public void stockExport(HttpServletResponse response,Integer page ,Integer pageSize) throws IOException {
        stockService.stockExport(response,page,pageSize);
    }

    /*
     * 功能描述：统计国内A股大盘T日和T-1日成交量对比功能（成交量为沪市和深市成交量之和）
     *      T-1日保证与T日时间线对其:
     *    如果当前时间点不在有效的股票交易日下,则将距离当前最近的一个时间点作为T日时间的查询:
     */
    @GetMapping("/stock/tradevol")
    private R<Map> getStockTradeVol4Comparison(){
        return stockService.getStockTradeVol4Comparison();
    }

    /*
    * 统计计当前时问下（精确到分钟），股票在各个冰阳区问的数量
    * 如果当前不在股票有效时间内，则以最近最新的一个有效股票交易日作为查询时间点展示;
    * */
    @GetMapping ("/stock/updown")
    public R<Map> getStockUpDownRegion(){
        return stockService.getStockUpDownRegion();
    }

    /*
     *查询个股的分时行情数据，也就是统计指定股票T日每分钟的交易数据
     * stockCode : 股票的编码(code)
     */
    @GetMapping("/stock/screen/time-sharing" )
    public R<List<Stock4MinuteDomain>> stockCreenTimeSharing(@RequestParam("code")String stockCode) {
        return stockService.stockCreenTimeSharing(stockCode);
    }

    /*
    * 功能描述:个股日K数据查询,可以根据时间区问查询数日的K线数据
    *       默认查询历史20天的数据;
    *   注意:如果当大盘尚未收盘，则以最新的交易价格作为收盘价格
    * */
    @GetMapping("/stock/screen/dkline")
    public R<List<Stock4EvrDayDomain>> stockScreenDkLine(String code){
        return stockService.stockScreenDkLine(code);
    }

}
